package com.zmn.oms.zmn.business.interfaces.work;

import com.zmn.oms.common.dto.OmsOperator;
import com.zmn.oms.model.dto.remind.RemindDTO;
import com.zmn.oms.model.entity.orderattachment.OrderAttachmentQuery;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.model.vo.work.OperatePermissionVO;

import java.util.List;

/**
 * 类描述：工单操作权限
 *
 * @author lujia
 * @date 2018/12/03 14:41
 */
public interface ZsOrderWorkOperatePermissionBService {

    /**
     * 获取工单操作权限
     * @param orderWork 工单
     * @return 操作权限集合
     */
    List<OperatePermissionVO> getOperatePermissionByModuleId(OrderWork orderWork, Integer moduleId, Integer operatorType, Long operatorId);

    /**
     * 获取工单操作权限
     * @param orderId 工单Id
     * @param workId 工单Id
     * @param type 操作类型
     * @param operatorType 操作员类型
     * @return 操作权限
     */
    OperatePermissionVO getOperatePermission(Long orderId, Long workId, Integer type, Integer operatorType);

    /**
     * 获取工单操作权限
     * @param orderId 工单Id
     * @param workId 工单Id
     * @param type 操作类型
     * @return 操作权限
     */
    OperatePermissionVO getOperatePermission(Long orderId, Long workId, Integer type);

    /**
     * 获取工单操作权限
     *
     * @param orderId
     * @param workId
     * @param type
     * @param operatorType
     * @param operatorId
     * @return
     */
    OperatePermissionVO getOperatePermission(Long orderId, Long workId, Integer type, Integer operatorType, Long operatorId);

    /**
     * 获取工单操作权限
     * @param order
     * @param type
     * @param operatorType
     * @return
     */
    OperatePermissionVO getOperatePermission(OrderWork order, Integer type, Integer operatorType);

    /**
     * 获取工单操作权限
     * @param order
     * @param type
     * @param operatorType
     * @param operatorId
     * @return
     */
    OperatePermissionVO getOperatePermission(OrderWork order, Integer type, Integer operatorType, Long operatorId);

    /**
     * 优惠操作权限
     * @param orderWork
     * @return
     */
    OperatePermissionVO discountPermission(OrderWork orderWork);

    /**
     *是否存在SCM 待审核配件
     * @param order
     * @param type
     * @return
     */
	OperatePermissionVO existsSCMToAuditParts(Long orderId, Integer type);

	/**
     * 订单是否等待支付
     *
     * @param order
     * @return
     */
    boolean isWaitPrePay(OrderWork order);

    /**
     * 检查工单渠道附件
     *
     * @param orderAttachmentQuery
     * @return
     */
    OperatePermissionVO requireOrderChannelAttachment(OrderAttachmentQuery orderAttachmentQuery);

    /**
     * 检查一键提醒
     *
     * @param remindDTO
     * @return
     */
    OperatePermissionVO oneClickReminderCheck(RemindDTO remindDTO);
}
